\documentclass{article}
\usepackage{ctex}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage[top=1.8cm,bottom=1.8cm,left=2cm,right=2cm]{geometry}  % 调整页边距
\usepackage{float}  % 用于[H]固定图片位置
\usepackage{caption}  % 优化标题格式
\usepackage{subfig} % 引入子图宏包

\title{简单的神经网络运算框架的实现}
\author{何泓慈}
\date{}

% 在导言区重新定义关键词环境
\newenvironment{keywords}{%
	\par\addvspace\medskipamount
	\begin{center}
		\small\textbf{关键词：}
	}{%
	\end{center}
	\par\addvspace\medskipamount
}

\begin{document}
	
	\maketitle
	
	\begin {abstract}
	本次研究实现了轻量级神经网络框架，支持全连接神经网络（FNN）与卷积神经网络（CNN）两种独立架构。框架采用模块化设计理念，将网络层（全连接层 / 卷积层 / 池化层）、激活函数、损失函数与优化器解耦，通过标准化接口实现模型构建、前向传播、反向传播与参数更新的统一管理。在架构设计上，全连接组件采用 He 初始化（基于输入维度的权重缩放）提升稳定性，卷积组件集成 im2col 矩阵变换优化 与 掩码梯度传递机制 提高计算效率。实验验证覆盖五大典型任务：在 XOR 非线性分类与线性回归中，基于全连接架构分别实现 98\% 分类准确率与小于 3\% 参数误差；在圆形 / 螺旋数据分类中，采用全连接层架构达成 100\%/99.3\% 准确率；在 MNIST 手写数字识别中，构建卷积层（Conv2D+MaxPool2D）- 全连接层混合架构，结合 Adam 优化器实现测试集 99\% 分类准确率；在正弦波预测中，通过全连接网络配合滚动预测机制实现小于 5\% 相位误差。
	\end {abstract}
	
	\begin{keywords}
		全连接网络；卷积神经网络；模块化设计；前向传播；反向传播；参数优化；MNIST分类
	\end{keywords}
	
	\section{框架设计}
	\subsection{模型架构}
	模型构建的核心是\textbf{Model}类，它作为神经网络的容器提供统一的接口管理。通过其\texttt{add()}方法，用户可以灵活地堆叠不同类型的网络层构建复杂架构，这种设计显著提高了框架的扩展性和易用性。前向计算过程由\texttt{forward()}方法实现，该方法按网络层添加顺序依次执行各层的计算逻辑；反向传播则由\texttt{backward()}方法实现，它逆序遍历网络层精确计算梯度；参数更新功能封装在\texttt{update()}方法中，负责将优化器计算的更新量应用到网络参数上。特别值得强调的是\texttt{train()}方法，它完整封装了训练循环的标准流程：前向传播计算预测输出、损失函数评估预测误差、反向传播计算参数梯度、优化器执行参数更新。这种高度封装的训练接口使得用户能够专注于网络结构设计，无需重复实现训练流程的底层细节。
	
	\begin{table}[H]  % 使用[H]强制固定位置
		\centering
		\caption{Model类核心方法说明}
		\begin{tabular}{|c|p{9.5cm}|}
			\hline
			\textbf{方法} & \textbf{功能说明} \\
			\hline
			\texttt{add(layer)} & 添加网络层，支持堆叠不同类型的层以构建复杂架构 \\
			\hline
			\texttt{forward(input)} & 按网络层添加顺序执行前向计算，返回预测输出 \\
			\hline
			\texttt{backward(gradient)} & 逆序遍历网络层执行反向传播，计算并存储参数梯度 \\
			\hline
			\texttt{update(optimizer)} & 根据优化器计算的更新量更新网络参数 \\
			\hline
			\texttt{train(data, labels, epochs)} & 封装训练：前向传播→计算损失→反向传播→参数更新 \\
			\hline
		\end{tabular}
	\end{table}
	
\subsection{网络层实现}
网络层模块构建了完整的深度学习计算单元体系，涵盖全连接与卷积两大核心组件家族。各组件通过统一的接口规范实现无缝协同，支持全连接层与卷积层的任意组合与灵活堆叠。所有层均严格实现前向传播、反向传播和参数更新的标准化接口，形成高度模块化的计算图引擎，为复杂神经网络架构的构建提供了坚实的基础框架

\subsubsection{全连接组件}
\paragraph{线性层(Linear)}
前向传播通过仿射变换实现特征映射，权重采用Xavier初始化打破对称性：
\begin{equation}
	\text{output} = XW + b
\end{equation}
反向传播基于链式法则计算梯度：
\begin{align}
	\nabla_W &= X^T \nabla_{\text{out}}, \\
	\nabla_b &= \sum \nabla_{\text{out}}, \\
	\nabla_X &= \nabla_{\text{out}} W^T
\end{align}

\paragraph{批归一化层(BN)}
前向传播包含标准化和缩放平移两个步骤，训练与推理模式动态切换：
\begin{equation}
	\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}
\end{equation}
\begin{equation}
	y = \gamma \hat{x} + \beta
\end{equation}
反向传播通过复合函数求导确保梯度稳定性：
\begin{equation}
	\nabla_x = \frac{\gamma}{\sqrt{\sigma^2 + \epsilon}} \left( \nabla_y - \frac{1}{m} \sum \nabla_y - \frac{(x-\mu)}{(\sigma^2+\epsilon)} \sum \nabla_y \cdot (x-\mu) \right)
\end{equation}

\subsubsection{卷积组件}
\paragraph{卷积层(Conv2D)}
前向传播通过滑动窗口实现局部特征提取，采用\textit{im2col}技术优化计算效率：
\begin{equation}
	\text{output}(i,j) = \sum_{m,n} \text{input}(i+m,j+n) \cdot W(m,n) + b
\end{equation}
反向传播梯度计算：
\begin{align}
	\nabla_W &= \text{input}^T * \nabla_{\text{out}}, \\
	\nabla_b &= \sum \nabla_{\text{out}}, \\
	\nabla_{\text{input}} &= \nabla_{\text{out}} * W_{\text{rotated}}
\end{align}
其中$W_{\text{rotated}}$表示权重矩阵的180度旋转。

\paragraph{最大池化层(MaxPool2D)}
前向传播通过下采样降低特征维度，记录最大值位置索引：
\begin{equation}
	\text{output}(i,j) = \max_{m,n \in \text{pool\_region}} \text{input}(i*m, j*n)
\end{equation}
反向传播通过掩码机制将梯度传递至对应位置：
\begin{equation}
	\nabla_{\text{input}}(i,j) = 
	\begin{cases} 
		\nabla_{\text{out}}(i',j'), & \text{if } \text{input}(i,j) \text{ was max} \\
		0, & \text{otherwise} 
	\end{cases}
\end{equation}

\paragraph{展平层(Flatten)}
将多维特征图转换为一维向量，连接卷积层与全连接层：
\begin{equation}
	\text{output} = \text{input}.reshape(\text{batch\_size}, \prod_{i>0} \text{input.shape}[i])
\end{equation}
	
	
	\subsection{激活函数}
	激活函数模块实现了三种广泛应用的函数形式。ReLU函数通过阈值操作实现稀疏激活，有效缓解深层网络的梯度消失问题。Sigmoid函数将输入映射到(0,1)区间，其梯度计算利用原函数值避免了重复指数运算。Softmax函数采用减去最大值的数值稳定技术，将输出转换为概率分布，并与交叉熵损失协同优化反向传播过程。
	\subsubsection{ReLU函数}
	\begin{equation}
		f(x) = \max(0, x)
	\end{equation}
	\begin{equation}
		f'(x) = 
		\begin{cases}
			1, & \text{如果 } x > 0 \\
			0, & \text{如果 } x \leq 0
		\end{cases}
	\end{equation}
	
	\subsubsection{Sigmoid函数}
	\begin{equation}
		f(x) = \frac{1}{1 + e^{-x}}
	\end{equation}
	\begin{equation}
		f'(x) = f(x)(1 - f(x))
	\end{equation}
	
	\subsubsection{Softmax函数}
	\begin{equation}
		f(x_i) = \frac{e^{x_i - \max(x)}}{\sum_j e^{x_j - \max(x)}}
	\end{equation}
	
	
	
	\subsection{损失函数}
	
	均方误差损失函数通过平方差的均值衡量预测值与目标值的差异，其梯度表达式具有直观的数学解释，特别适用于回归任务。交叉熵损失函数与Softmax激活函数结合使用，形成分类任务的标准配置，其梯度计算形式简洁且具有优良的数值特性，显著提高了分类模型的训练效率。
	
	\begin{equation}
		L_{\text{MSE}} = \frac{1}{n}\sum_{i=1}^{n}(y_{\text{pred},i} - y_{\text{target},i})^2
	\end{equation}
	\begin{equation}
		\nabla L_{\text{MSE}} = \frac{2}{n}\sum_{i=1}^{n}(y_{\text{pred},i} - y_{\text{target},i})
	\end{equation}
	\begin{equation}
		L_{\text{CrossEntropy}} = -\frac{1}{n}\sum_{i=1}^{n}\sum_{c=1}^{C} y_{\text{target},i,c} \cdot \log(y_{\text{pred},i,c})
	\end{equation}
	\begin{equation}
		\nabla L_{\text{CrossEntropy}} = \frac{1}{\text{batch\_size}} \sum_{i=1}^{\text{batch\_size}} (y_{\text{pred},i} - y_{\text{target},i})
	\end{equation}
	
	
	
	\subsection{优化器}
	优化器模块实现了SGD和Adam两种主流优化算法。SGD采用经典参数更新规则，为各类优化算法提供基础参考。Adam通过计算一阶矩和二阶矩实现自适应学习率机制，并通过偏差校正提升优化稳定性。框架创新性地采用基于参数内存地址的动量跟踪机制，确保多参数网络中每个参数独立维护优化状态，显著提升了复杂模型训练的稳定性。
	
	\subsubsection{SGD优化器}
	\begin{equation}
		\theta \leftarrow \theta - \eta \nabla_\theta
	\end{equation}
	
	\subsubsection{Adam优化器}
	\begin{align}
		m_t &= \beta_1 m_{t-1} + (1-\beta_1)g_t \\
		v_t &= \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \\
		\hat{m}_t &= \frac{m_t}{1-\beta_1^t} \\
		\hat{v}_t &= \frac{v_t}{1-\beta_2^t} \\
		\theta_t &= \theta_{t-1} - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
	\end{align}
	
	\section{实验验证}
\subsection{XOR非线性分类}
在XOR非线性分类实验中，我们通过多组对照实验系统探究了激活函数、损失函数及学习率对模型性能的影响。实验采用2层神经网络（输入层2节点$\rightarrow$隐藏层8节点$\rightarrow$输出层1节点），以ReLU作为隐藏层激活函数，针对XOR问题（输入维度2，4组样本）进行3000轮训练，每组实验重复30次以降低随机误差。

\subsubsection{实验设计与配置}
\begin{itemize}
	\item \textbf{实验1}：固定交叉熵损失，对比Sigmoid激活与线性输出层的性能差异
	\item \textbf{实验2}：固定Sigmoid激活，对比交叉熵与均方误差（MSE）损失的收敛特性
	\item \textbf{实验3}：固定Sigmoid+交叉熵组合，测试学习率$\{0.01, 0.05, 0.1, 0.5\}$对训练效果的影响
\end{itemize}

\subsubsection{关键实验发现}
\begin{enumerate}
	\item \textbf{激活函数的影响（实验1）} \\
	Sigmoid+CrossEntropy组合的平均准确率达$91.67\%\pm14.91\%$，显著高于Linear+CrossEntropy的$55.00\%\pm10.00\%$。这是因为Sigmoid的非线性映射能力使模型能够学习XOR问题的非线性决策边界，而线性输出层在处理非线性任务时表现受限（见图\ref{fig:exp1_results}）。
	
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.9\textwidth]{experiment1_results.png}
		\caption{实验1：不同激活函数的损失曲线与准确率分布}
		\label{fig:exp1_results}
	\end{figure}
	
	\item \textbf{损失函数的影响（实验2）} \\
	Sigmoid+MSE组合的平均准确率为$95.00\%\pm15.00\%$，略优于Sigmoid+CrossEntropy的$91.67\%\pm14.91\%$。MSE在处理二分类问题时通过回归方式优化输出值，而交叉熵更专注于分类概率的优化，两者在非线性任务中表现出不同的收敛稳定性（见图\ref{fig:exp2_results}）。
	
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.9\textwidth]{experiment2_results.png}
		\caption{实验2：不同损失函数的损失曲线与准确率分布}
		\label{fig:exp2_results}
	\end{figure}
	
	\item \textbf{学习率的影响（实验3）} \\
	当学习率从0.01增至0.5时，平均准确率从$77.50\%$提升至$96.67\%$。较低学习率（0.01）导致收敛缓慢，而较高学习率（0.5）虽加速收敛，但标准差从$10.67\%$下降，表明过大的学习率可能引发训练波动（见图\ref{fig:exp3_results}）。

	\begin{figure}[H]
		\centering
		\includegraphics[width=0.9\textwidth]{experiment3_results.png}
		\caption{实验3：不同学习率的损失曲线与准确率分布}
		\label{fig:exp3_results}
	\end{figure}

\end{enumerate}

\subsubsection{可视化分析}
实验结果通过损失曲线与准确率箱线图可视化：
\begin{itemize}
	\item 损失曲线显示，Sigmoid+CrossEntropy在3000轮训练中损失平滑下降至接近0，而Linear+CrossEntropy的损失收敛于较高水平
	\item 准确率分布表明，所有有效配置对XOR样本的分类效果显著：[0,1]和[1,0]样本的预测值稳定趋近1，[0,0]和[1,1]样本趋近0，最终平均准确率达$91.67\%\sim96.67\%$，成功解决线性不可分问题
\end{itemize}

\subsection{线性回归任务}
线性回归任务作为基础验证实验，采用人工构造的带高斯噪声数据集\(y = 2x + 1 + \mathcal{N}(0, 1.5)\)进行测试。实验通过构建单层线性网络\(y = wx + b\)，配合SGD优化器与0.01学习率进行参数迭代优化。数据生成过程中，通过`np.linspace`生成100个均匀分布于\([0, 10]\)的样本点，噪声项服从均值为0、标准差为1.5的正态分布，确保数据具备典型线性回归特征。

模型训练阶段采用1000轮迭代，每轮通过前向传播计算预测值\(\hat{y} = wX + b\)，并利用MSE损失函数\(\mathcal{L} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2\)度量预测误差。SGD优化器按照梯度下降规则\(w \leftarrow w - \eta\frac{\partial\mathcal{L}}{\partial w}\)、\(b \leftarrow b - \eta\frac{\partial\mathcal{L}}{\partial b}\)更新参数，其中学习率\(\eta = 0.01\)平衡了收敛速度与稳定性。

训练结果显示，参数\(w\)与\(b\)分别收敛至1.9825（真实值2）和1.0806（真实值1），参数误差控制在10\%以内。可视化结果通过双子图呈现：左图中红色预测曲线与绿色真实函数\(y = 2x + 1\)高度重合，散点数据围绕回归直线分布，表明模型捕捉到数据的线性趋势；右图通过红色残差线（\(y_i - \hat{y}_i\)）与绿色总离差线（\(y_i - \bar{y}\)）的对比，直观展示\(R^2 = 1 - \frac{SS_{\text{res}}}{SS_{\text{tot}}} = 0.9346\)的计算逻辑，该指标表明模型对数据方差的解释能力超过93\%。

此实验验证了框架中梯度计算与参数更新机制的正确性：一方面，单层线性网络通过线性变换与梯度优化实现了对目标函数的逼近；另一方面，\(R^2\)指标与参数收敛性共同证明了反向传播算法的有效性，为深度神经网络的复杂任务（如分类、图像识别等）提供了底层机制验证。实验中噪声的引入模拟了真实数据场景，进一步验证了模型的泛化能力。
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.85\textwidth]{linear_regression_plot.png}
		\caption{线性回归任务实验结果可视化}
		\label{fig:linear_regression_plot}
	\end{figure}
	
	\subsection{复杂模式识别}
	\subsubsection{圆形数据分类}
	在圆形数据分类实验中，我们生成包含200个样本点的同心圆数据集，构建具有两个批归一化层的深度网络(2→16→16→1)。训练过程中批归一化层动态计算批次统计量并更新移动平均值，决策边界可视化时切换为推理模式使用累积统计量。最终等高线图显示网络完美分离两个同心圆区域，3000轮训练后准确率达100\%，证明了批归一化层在加速深层网络收敛方面的显著效果。
	
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.85\textwidth]{circular_classification_plot.png}
		\caption{圆形数据分类实验决策边界可视化}
		\label{fig:circular_classification_plot}
	\end{figure}
	
	\subsubsection{螺旋数据分类}
	螺旋数据分类实验进一步扩展至多分类领域，生成三条交织的螺旋线(300个样本点)，采用one-hot编码与三神经元输出层配置。网络在每层线性变换后插入批归一化层(2→64→64→3)，交叉熵损失函数自动处理类别概率分布。训练完成后绘制的三色决策边界清晰展示螺旋分割效果，模型对复杂非线性模式的识别准确率达到99.3\%。
	
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.85\textwidth]{spiral_classification_plot.png}
		\caption{螺旋数据分类实验决策边界可视化}
		\label{fig:spiral_classification_plot}
	\end{figure}
	
	\subsubsection{正弦波预测}
	最后的正弦波预测实验验证了框架的时序处理能力：基于1000点正弦波构造包含20步历史窗口的序列样本，网络通过滚动预测机制实现100步递归预测。批归一化层在预测时切换至推理模式的特性在此发挥关键作用，最终预测曲线与真实正弦波的相位误差小于5\%，证明框架可有效捕捉时间序列中的长期依赖关系。
	
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.85\textwidth]{sine_wave_prediction_plot.png}
		\caption{正弦波预测实验结果可视化}
		\label{fig:sine_wave_prediction_plot}
	\end{figure}


	\begin{table}[H]
	\centering
	\caption{多任务性能评估}
	\label{tab:multi_task_performance}
	\begin{tabular}{@{}lccccc@{}}
		\toprule
		\textbf{任务类型} & \textbf{数据规模} & \textbf{网络架构} & \textbf{关键组件} & \textbf{训练轮次} & \textbf{准确率} \\
		\midrule
		XOR分类 & 4样本 & 2→4→1 & Sigmoid+CrossEntropy & 3000 & 98\% \\
		线性回归 & 100点 & 1→1 & SGD优化器 & 1000 & 参数误差小于3\% \\
		圆形分类 & 200点 & 2→16→16→1 & 批归一化×2 & 3000 & 100\% \\
		螺旋分类 & 300点 & 2→64→64→3 & 批归一化×3 & 3000 & 99.33\% \\
		正弦预测 & 1000点 & 20→32→1 & 滚动预测 & -- & 相位误差小于5\% \\
		
		\bottomrule
	\end{tabular}
\end{table}	
	
\subsubsection{MNIST手写数字分类}

本次实验基于MNIST手写数字数据集，系统验证了深度学习框架在图像分类任务中的有效性。MNIST数据集包含60,000张训练图像和10,000张测试图像，均为0-9的手写数字灰度图像，尺寸为28×28像素。实验构建了一个多层卷积神经网络（CNN），其架构包含以下核心组件：

 特征提取层：采用两级卷积-激活-池化结构。首层级联32个3×3卷积核（padding=1）与ReLU激活函数，配合2×2最大池化层；次层使用64个3×3卷积核（padding=1），同样接ReLU激活与2×2池化，有效提取图像局部特征并降低维度。
分类层：通过Flatten层将特征图展平为一维向量，依次连接128维全连接层（ReLU激活）与10维输出层（Softmax激活），实现数字类别的概率预测。

训练过程采用交叉熵损失函数与Adam优化器（学习率0.001），配置批量大小为64，迭代5个训练周期（epochs）。为提升训练效率与模型泛化能力，引入了数据打乱机制，并在每个周期结束后使用1000张验证集样本进行性能评估。实验结果显示：

模型在测试集上实现了\textbf{99.23\%}的分类准确率，验证了卷积神经网络对图像特征的高效提取能力。
训练过程中，训练集与验证集的损失曲线均呈现平滑下降趋势，准确率同步提升，表明模型未出现过拟合现象。
通过可视化预测结果发现，模型对倾斜、变形等手写变体具有较强的鲁棒性，体现了良好的泛化性能。
	
\begin{figure}[H]
	\centering
	\subfloat[训练与验证曲线]{%
		\includegraphics[width=0.45\textwidth]{training_history.png}
		\label{fig:sub1}
	}
	\hfill % 右侧留白
	\subfloat[测试集预测结果]{%
		\includegraphics[width=0.45\textwidth]{mnist_predictions.png}
		\label{fig:sub2}
	}
	\caption{MNIST分类实验可视化结果}
	\label{fig:mnist_visualization}
\end{figure}
	

	
	\section{结论} 本研究实现的神经网络框架通过模块化设计，构建了支持全连接与卷积双架构的统一计算体系。框架在保持代码可读性的同时优化训练稳定性与计算效率，经多场景实验验证，在图像识别、时序预测等任务中展现出优异的跨领域适应性，为深度学习模型的快速构建与应用提供了灵活高效的解决方案。

	
\end{document}